package Group.projectA;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class AddressBook extends ArrayList<Person>{

	public AddressBook() {
		super();
	}

	public AddressBook(Collection<? extends Person> c) {
		super(c);
	}

	public AddressBook(int initialCapacity) {
		super(initialCapacity);
	}
	
	/**
	 * 从文件中载入通讯录
	 * @param bookFile
	 */
	public void loadAddressBook(File bookFile){
		try{
			FileReader fr=new FileReader(bookFile);
			BufferedReader br=new BufferedReader(fr);
			String temp;
			while((temp=br.readLine())!=null){
				
				String attribute[] =temp.split(" ");/**
				分隔联系人信息：姓名   性别   地址······*/
				/**
				 * 映射通讯录中联系人*/
				this.add(new Person(attribute[0],attribute[1],attribute[2],attribute[3],attribute[4]));
			}
			br.close();
			fr.close();
		}catch(Exception e){
			System.out.println("从文件"+bookFile.getName()+"载入通讯录失败");
			e.printStackTrace();
		}
	}
	
	/**
	 * 保存通信录
	 * @param bookFile
	 */
	public void saveAddressBook(File bookFile){
		Person p;
		try{
			FileWriter fw=new FileWriter(bookFile);
			BufferedWriter bw=new BufferedWriter(fw);
			Iterator<Person> ite= this.iterator();
			/**
			 * 迭代器
			 */
			while(ite.hasNext()){
				p=ite.next();
				/**
				 * 下个联系人
				 */
				p.saveMe(bw);
				/**
				 * 保存
				 */
				bw.flush();
			}
		}catch(IOException e){
			System.out.println("写入通讯录文件"+bookFile.getName()+"失败");
			e.printStackTrace();
		}
	}
	
	/**
	 * 增加联系人
	 * @param p
	 */
	public void addPerson(Person p) {
		this.add(p);
	}
	
	/**
	 * 删除联系人
	 * @param p
	 */
	public void deletePerson(Person p) {
		this.remove(this.indexOf(p));
	}
	
	/**
	 * 修改联系人
	 * @param pOld
	 * @param pNew
	 */
	public void updatePerson(Person pOld,Person pNew){
		this.add(this.indexOf(pOld), pNew);
	}
	
	/**
	 * 查
	 * @param name
	 * @return
	 */
	public Person[] findPerson(String name){
		Iterator<Person> itor=this.iterator();
		Person p;
		ArrayList<Person> finds=new ArrayList<Person>(0);//保存查找结果
		while(itor.hasNext()){
			p=itor.next();
			String pName=p.getName();
			boolean b=name.matches(pName);
			if(b){
				finds.add(p);
			}
		}
		Person findp[] =new Person[finds.size()];
		return finds.toArray(findp);
	}
	public int getSize(){
		return this.size();
		
	}

}
